require('mysql2'); // 确保 mysql2 被显式引用

const Sequelize = require('sequelize');
// MySQL 配置信息
const dbConfig = {
    username: 'root',    // 数据库用户名
    password: '123456',  // 数据库密码
    database: 'monitor_project', // 数据库名称
    host: '127.0.0.1',   // MySQL服务器地址
    dialect: 'mysql',    // 数据库类型
};

// 使用新的数据库连接
const sequelizeTarget = new Sequelize(dbConfig.database, dbConfig.username, dbConfig.password, {
    host: dbConfig.host,
    dialect: dbConfig.dialect,
    logging: false,
});

// 检查并创建数据库的函数
const createDatabaseIfNotExist = async () => {
    const defaultSequelize = new Sequelize('mysql', dbConfig.username, dbConfig.password, {
        host: dbConfig.host,
        dialect: dbConfig.dialect,
        logging: false,
    });

    try {
        // 连接到默认数据库 'mysql'
        await defaultSequelize.authenticate();
        console.log('默认数据库连接成功');

        // 查询数据库是否存在
        const [results] = await defaultSequelize.query(`SHOW DATABASES LIKE '${dbConfig.database}'`);
        if (results.length === 0) {
            console.log(`数据库 ${dbConfig.database} 不存在，开始创建...`);
            await defaultSequelize.query(`CREATE DATABASE ${dbConfig.database}`);
            console.log(`数据库 ${dbConfig.database} 创建成功`);
        } else {
            console.log(`数据库 ${dbConfig.database} 已经存在`);
        }
    } catch (error) {
        console.error('数据库检查失败:', error.message);
        throw error; // 继续抛出错误，供外层捕获
    } finally {
        // 确保连接被关闭
        await defaultSequelize.close();
        console.log('默认数据库连接已关闭');
    }
};

// 主连接函数
const connectDB = async () => {
    try {
        // 检查并创建数据库
        await createDatabaseIfNotExist();

        // 连接到目标数据库
        await sequelizeTarget.authenticate();
        console.log(`成功连接到数据库 ${dbConfig.database}`);
    } catch (error) {
        console.error('MySQL 连接失败:', error.message);
    }
};

module.exports = {
    connectDB,
    sequelizeTarget,
};
